package service;

import dao.DvdDao;
import dao.DvdDaoImpl;
import pojo.DVD;

import java.time.LocalDate;

/**
 * DVD管理的业务类
 * 负责每个业务的流程控制
 * 同时数据操作的执行也是由业务类进行调用的
 */
public class DvdService {

    //数据层的声明
    private DvdDao dao = new DvdDaoImpl();

    /**
     * 新增DVD的操作业务
     * @param name 新增的DVD名称
     * @param rent 租金
     */
    public void saveDvd(String name,double rent){
        DVD dvd = new DVD(name, 1, null, 0, rent);
        //保存新增DVD
        boolean result = dao.insertDVD(dvd);
        if (result) {
            System.out.println(name + "保存成功!!!!!");
        } else {
            System.out.println("货架已满," + name + "新增失败!!!!!");
        }
    }

    /**
     * 查看dvd货架信息
     */
    public void showDVD(){
        //获取货架上所有的DVD
        DVD[] dvds = dao.queryAll();
        for (int j = 0; j < dvds.length; j++) {
            System.out.println((j + 1) + "\t " +
                    (dvds[j].getState() == 0 ? "已借出" : "未借出") + "\t" +
                    dvds[j].getName() + "\t " +
                    dvds[j].getCount() + "\t  " +
                    (dvds[j].getDate() == null ? " " : dvds[j].getDate()));
        }
    }


    /**
     * 删除DVD
     * @param name
     */
    public void deleteDvd(String name){
        //先确认当前dvd是否存在
        DVD dvd1 = dao.queryByName(name);
        if (dvd1 == null) {
            //此时说明没有要删除的dvd
            System.out.println(name + "不存在!!!!!!");
        } else {
            //如果此dvd存在，就执行删除
            boolean flag = dao.deleteByName(name);
            if (flag) {
                System.out.println(name + "删除成功!!!!!");
            } else {
                System.out.println(name + "删除失败!!!!!");
            }
        }
    }

    /**
     * 借阅DVD
     * @param name  dvd名称
     */
    public void borrow(String name){
        //判断是否存在
        DVD dvd2 = dao.queryByName(name);
        if (dvd2 == null) {
            System.out.println(name + "不存在!!!!!!");
        } else {
            //如果当前dvd存在，需要判断当前dvd是否已被借出
            if (dvd2.getState() == 0) {
                System.out.println(name + "已被借出!!!!!");
            } else {
                //执行借出
                dao.lendDvd(new DVD(name));
                System.out.println(name + "借出成功!!!!!");
            }
        }
    }

    /**
     * 归还DVD
     * @param name 名字
     */
    public void restitution(String name){
        //判断是否存在
        DVD dvd2 = dao.queryByName(name);
        if (dvd2 == null) {
            System.out.println(name + "不存在!!!!!!");
        } else {
            //如果当前dvd存在，需要判断当前dvd是否已被借出
            if (dvd2.getState() == 1) {
                System.out.println(name + "未被借出!!!!!");
            } else {
                //租金计算
                //先获取哪一天租的
                int dayOfYear = dvd2.getDate().getDayOfYear();
                int now = LocalDate.now().getDayOfYear();
                double price = (now - dayOfYear + 1) * dvd2.getRent();
                System.out.println("需要支付租金" + price);
                //执行归还
                dao.revert(name);
                System.out.println(name + "归还成功!!!!!");
            }
        }
    }



}
